#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
统一版本号管理脚本
支持以下功能：
- increment: 递增版本号并更新所有相关文件（默认行为）
- sync: 同步版本号到所有相关文件
- resource: 仅更新资源文件版本号
- cpp: 仅更新CPP文件版本号
"""

import os
import re
import sys

def get_current_version():
    """从version.txt文件读取当前版本号"""
    version_file = "version.txt"
    
    if os.path.exists(version_file):
        with open(version_file, 'r', encoding='utf-8') as f:
            current_version = f.read().strip()
            # 验证版本号格式
            if re.match(r'^\d+\.\d+\.\d+$', current_version):
                return current_version
    
    # 如果version.txt不存在或格式错误，使用默认版本号
    return "0.0.1"

def update_cpp_version(version):
    """更新SilentMouseOperation.cpp文件中的版本号"""
    cpp_file = "SilentMouseOperation.cpp"
    
    if not os.path.exists(cpp_file):
        print(f"警告: 文件 {cpp_file} 不存在")
        return False
    
    with open(cpp_file, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 替换版本号
    new_content = re.sub(
        r'SILENT_MOUSE_OPERATION_VERSION L"\d+\.\d+\.\d+"',
        f'SILENT_MOUSE_OPERATION_VERSION L"{version}"',
        content
    )
    
    with open(cpp_file, 'w', encoding='utf-8') as f:
        f.write(new_content)
    
    print(f"已更新SilentMouseOperation.cpp中的版本号为: {version}")
    return True

def update_resource_version(version):
    """更新资源文件中的版本号"""
    resource_file = "SilentMouseOperation.rc"
    
    if not os.path.exists(resource_file):
        print(f"警告: 文件 {resource_file} 不存在")
        return False
    
    # 解析版本号
    parts = version.split('.')
    if len(parts) != 3:
        parts = ["0", "0", "1"]
    
    major = int(parts[0])
    minor = int(parts[1])
    build = int(parts[2])
    
    # 读取资源文件
    with open(resource_file, 'r', encoding='utf-8') as f:
        content = f.read()
    
    # 更新FILEVERSION和PRODUCTVERSION
    new_content = re.sub(
        r'FILEVERSION \d+,\d+,\d+,\d+',
        f'FILEVERSION {major},{minor},{build},0',
        content
    )
    
    new_content = re.sub(
        r'PRODUCTVERSION \d+,\d+,\d+,\d+',
        f'PRODUCTVERSION {major},{minor},{build},0',
        new_content
    )
    
    # 更新FileVersion和ProductVersion字符串
    new_content = re.sub(
        r'VALUE "FileVersion", "[\d\.]+"',
        f'VALUE "FileVersion", "{version}"',
        new_content
    )
    
    new_content = re.sub(
        r'VALUE "ProductVersion", "[\d\.]+"',
        f'VALUE "ProductVersion", "{version}"',
        new_content
    )
    
    # 写回文件
    with open(resource_file, 'w', encoding='utf-8') as f:
        f.write(new_content)
    
    print(f"已更新SilentMouseOperation.rc中的版本号为: {version}")
    return True

def increment_version_number():
    """递增version.txt中的版本号并返回新版本号"""
    version_file = "version.txt"
    
    # 从version.txt读取当前版本号
    current_version = get_current_version()
    print(f"读取到的版本号为: {current_version}")
    
    # 解析版本号
    parts = current_version.split('.')
    if len(parts) != 3:
        parts = ["0", "0", "1"]
    
    # 递增构建号（第三位）
    major = int(parts[0])
    minor = int(parts[1])
    build = int(parts[2]) + 1
    
    new_version = f"{major}.{minor}.{build}"
    
    # 更新版本文件
    with open(version_file, 'w', encoding='utf-8') as f:
        f.write(new_version)
    
    print(f"版本号已从 {current_version} 更新为 {new_version}")
    return new_version

def update_all_files_with_version(version):
    """用指定版本号更新所有相关文件"""
    update_cpp_version(version)
    update_resource_version(version)
    return True

def increment_version():
    """递增版本号并更新所有相关文件"""
    print("=" * 50)
    
    # 递增版本号
    new_version = increment_version_number()
    
    # 用新版本号更新所有文件
    update_all_files_with_version(new_version)
    
    print("=" * 50)
    return new_version

def show_help():
    """显示帮助信息"""
    print("""
版本号管理脚本使用说明:

用法: python increment_version.py [命令]

可用命令:
  increment  - 递增版本号并更新所有相关文件（默认行为）
  sync       - 同步版本号到所有相关文件
  resource   - 仅更新资源文件版本号
  cpp        - 仅更新CPP文件版本号
  help       - 显示此帮助信息

示例:
  python increment_version.py           # 递增版本号
  python increment_version.py sync      # 同步版本号
  python increment_version.py resource  # 仅更新资源文件
""")

if __name__ == "__main__":
    # 处理命令行参数
    if len(sys.argv) > 1:
        command = sys.argv[1].lower()
        
        if command in ["help", "-h", "--help"]:
            show_help()
        else:
            print(f"未知命令: {command}")
            show_help()
    else:
        # 默认行为：递增版本号
        increment_version()